package com.example.cs4.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.Set;

@Service
public class MessageRankService {
    private static final String MESSAGE_RANK_KEY = "chat:message_rank";

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    // 增加用户消息计数
    public void incrementMessageCount(String userId) {
        redisTemplate.opsForZSet().incrementScore(MESSAGE_RANK_KEY, userId, 1);
    }

    // 获取Top10用户及其消息条数
    public Set<ZSetOperations.TypedTuple<String>> getTopUsers() {
        // 获取 Redis 中有序集合的元素数量
        long userCount = redisTemplate.opsForZSet().zCard(MESSAGE_RANK_KEY);

        // 如果没有用户数据，返回空集合
        if (userCount == 0) {
            return Collections.emptySet();
        }
        if (userCount > 10) {
            System.out.println("每日top用户不能超过10名");
        }

        // 返回排名前 10 的用户及其消息条数
        return redisTemplate.opsForZSet()
                .reverseRangeWithScores(MESSAGE_RANK_KEY, 0, Math.min(9, userCount - 1));
    }


}